From a287326f8f5d48c721a5cb77baf6b10e2f5af65d Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Mon, 24 Mar 2025 15:59:07 +0100 Subject: [PATCH] sending header X-File-MD5 that is currently mandatory Signed-off-by: Matthieu Gallien --- src/libsync/bulkpropagatorjob.cpp | 31 +++++++++++++++++++++++++++---- src/libsync/bulkpropagatorjob.h | 11 +++++++++-- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/libsync/bulkpropagatorjob.cpp b/src/libsync/bulkpropagatorjob.cpp index 942605f18..b61181fd0 100644 --- a/src/libsync/bulkpropagatorjob.cpp +++ b/src/libsync/bulkpropagatorjob.cpp @@ -129,7 +129,8 @@ void BulkPropagatorJob::startUploadFile(SyncFileItemPtr item, UploadFileInfo fil void BulkPropagatorJob::doStartUpload(SyncFileItemPtr item, UploadFileInfo fileToUpload, - QByteArray transmissionChecksumHeader) + QByteArray transmissionChecksumHeader, + QByteArray md5ChecksumHeader) { if (propagator()->_abortRequested) { return; @@ -187,6 +188,7 @@ void BulkPropagatorJob::doStartUpload(SyncFileItemPtr item, const auto remotePath = propagator()->fullRemotePath(fileToUpload._file); + currentHeaders["X-File-MD5"] = md5ChecksumHeader; currentHeaders[checkSumHeaderC] = transmissionChecksumHeader; BulkUploadItem newUploadFile{propagator()->account(), item, fileToUpload, @@ -279,7 +281,27 @@ void BulkPropagatorJob::slotComputeTransmissionChecksum(SyncFileItemPtr item, computeChecksum->setChecksumType(checksumType); connect(computeChecksum, &ComputeChecksum::done, this, [this, item, fileToUpload] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) { - slotStartUpload(item, fileToUpload, contentChecksumType, contentChecksum); + slotComputeMd5Checksum(item, fileToUpload, contentChecksumType, contentChecksum); + }); + connect(computeChecksum, &ComputeChecksum::done, computeChecksum, &QObject::deleteLater); + + computeChecksum->start(fileToUpload._path); +} + +void BulkPropagatorJob::slotComputeMd5Checksum(SyncFileItemPtr item, + UploadFileInfo fileToUpload, + const QByteArray &transmissionChecksumType, + const QByteArray &transmissionChecksum) +{ + // Compute the transmission checksum. + const auto computeChecksum = new ComputeChecksum(this); + const auto checksumType = QByteArray{"MD5"}; + computeChecksum->setChecksumType(checksumType); + + connect(computeChecksum, &ComputeChecksum::done, this, [this, item, fileToUpload, transmissionChecksumType, transmissionChecksum] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) { + Q_UNUSED(contentChecksumType) + + slotStartUpload(item, fileToUpload, transmissionChecksumType, transmissionChecksum, contentChecksum); }); connect(computeChecksum, &ComputeChecksum::done, computeChecksum, &QObject::deleteLater); @@ -289,7 +311,8 @@ void BulkPropagatorJob::slotComputeTransmissionChecksum(SyncFileItemPtr item, void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item, UploadFileInfo fileToUpload, const QByteArray &transmissionChecksumType, - const QByteArray &transmissionChecksum) + const QByteArray &transmissionChecksum, + const QByteArray &md5Checksum) { const auto transmissionChecksumHeader = makeChecksumHeader(transmissionChecksumType, transmissionChecksum); @@ -351,7 +374,7 @@ void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item, return; } - doStartUpload(item, fileToUpload, transmissionChecksum); + doStartUpload(item, fileToUpload, transmissionChecksum, md5Checksum); } void BulkPropagatorJob::slotOnErrorStartFolderUnlock(SyncFileItemPtr item, diff --git a/src/libsync/bulkpropagatorjob.h b/src/libsync/bulkpropagatorjob.h index 3e4303461..95189bf26 100644 --- a/src/libsync/bulkpropagatorjob.h +++ b/src/libsync/bulkpropagatorjob.h @@ -73,11 +73,17 @@ private slots: void slotComputeTransmissionChecksum(OCC::SyncFileItemPtr item, OCC::BulkPropagatorJob::UploadFileInfo fileToUpload); + void slotComputeMd5Checksum(SyncFileItemPtr item, + UploadFileInfo fileToUpload, + const QByteArray &transmissionChecksumType, + const QByteArray &transmissionChecksum); + // transmission checksum computed, prepare the upload void slotStartUpload(OCC::SyncFileItemPtr item, OCC::BulkPropagatorJob::UploadFileInfo fileToUpload, const QByteArray &transmissionChecksumType, - const QByteArray &transmissionChecksum); + const QByteArray &transmissionChecksum, + const QByteArray &md5Checksum); // invoked on internal error to unlock a folder and failed void slotOnErrorStartFolderUnlock(OCC::SyncFileItemPtr item, @@ -94,7 +100,8 @@ private slots: private: void doStartUpload(SyncFileItemPtr item, UploadFileInfo fileToUpload, - QByteArray transmissionChecksumHeader); + QByteArray transmissionChecksumHeader, + QByteArray md5ChecksumHeader); void adjustLastJobTimeout(AbstractNetworkJob *job, qint64 fileSize) const; -- 2.30.2